import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListTest2 {
    /*
    List集合的遍历方式
     */
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("兔宝宝");
        list.add("派大星");
        list.add("海绵宝宝");

        // for循环
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));

        }
        // 增强for循环
        for (String s : list) {
                System.out.println(s);
            }

        // 迭代器
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        // Lambda表达式
        list.forEach(System.out::println);


        System.out.println("--------------------------------------------------");
        List<String> list1= new ArrayList<>();
        list1.add("李小");
        list1.add("派大星");
        list1.add("小李");
        list1.add("大李小");
        list1.add("李拉拉");

//        for (int i = 0; i < list1.size(); i++) {
//            String s = list1.get(i);
//            if (s.contains("李")) {
//                list1.remove(s);
//                i --;
//            }
//        }
//        System.out.println(list1);
        // 倒着去删除也是可以的
        // 使用lanbda表达式/增强for循环会出现"程序并发修改"异常

        Iterator<String> iterator1 = list1.iterator();
        while (iterator1.hasNext()) {
            String s = iterator1.next();
            if (s.contains("李")) {
//                list.remove(s);   //并发修改异常的错误
                iterator1.remove(); // 删除迭代器当前遍历到的数据 每删除一个数据后 相当于在底层做了i--
            }
        }
        System.out.println(list1);
    }

}